//社团共有 num 位成员参与破冰游戏，编号为 0 ~ num-1。成员们按照编号顺序围绕圆桌而坐。社长抽取一个数字 target，从 0 号成员起开始计数，
//排在第 target 位的成员离开圆桌，且成员离开后从下一个成员开始计数。请返回游戏结束时最后一位成员的编号。 
//
// 
//
// 示例 1： 
//
// 
//输入：num = 7, target = 4
//输出：1
// 
//
// 示例 2： 
//
// 
//输入：num = 12, target = 5
//输出：0
// 
//
// 
//
// 提示： 
//
// 
// 1 <= num <= 10^5 
// 1 <= target <= 10^6 
// 
//
// 
//
// Related Topics 递归 数学 👍 878 👎 0


package LeetCode.editor.cn;

/**
 * @author ldltd
 * @date 2025-05-23 16:03:17
 * @description LCR 187.破冰游戏
 */
public class YuanQuanZhongZuiHouShengXiaDeShuZiLcof{
	 public static void main(String[] args) {
	 	 //测试代码
	 	 YuanQuanZhongZuiHouShengXiaDeShuZiLcof fun=new YuanQuanZhongZuiHouShengXiaDeShuZiLcof();
	 	 Solution solution = fun.new Solution();

	 }
	 
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
	//开始的人报数1，然后数到m的时候出局，下一个人继续从1开始
	//一共有n个人，问剩下的最后一个人是谁
	/*
	* 约瑟夫环问题
	* 每轮结束后，n-1,由于m可能大于n。所以删除的数为（m-1)mod n
	* 删除后下个数字为 m mod n
	* 下一轮要删除的是 (m%n+m-1)%n
	* 递推得到
	* 最后当只有一个元素时，坐标是0
	* 即dp[1]=0
	* dp[i]=(dp[i-1]+m)%i
	* 从n为0往上推
	* */
	public int iceBreakingGame(int num, int target) {
		int x = 0;
		for (int i = 2; i <= num; i++) {
			x = (x + target) % i;
		}
		return x;
	}

}
//leetcode submit region end(Prohibit modification and deletion)

}
